home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / tvtoys04.zip / TVPAL.PAS < prev    next >
Pascal/Delphi Source File  |  1993-12-18  |  6KB  |  227 lines

  1. (***************************************************************************
  2.   TV Palette unit
  3.   Dialog with palette entry sliders and inputlines
  4.   PJB December 14, 1993, Internet mail to d91-pbr@nada.kth.se
  5.   Copyright PJB 1993, All Rights Reserved.
  6.   Free source, use at your own risk.
  7.   If modified, please state so if you pass this around.
  8.  
  9.   The general idea is to switch to HSV instead of RGB.
  10.  
  11. ***************************************************************************)
  12. unit TVPal;
  13. {$I toyCfg}
  14.  
  15. {$O+,X+}
  16.  
  17. interface
  18.  
  19.   uses
  20.     ColorSel, Dialogs, Drivers, Objects, Validate, Views,
  21.     toyPrefs, {$I hcFile}
  22.     Pal, Scroll, TVUtils;
  23.  
  24.   type
  25.     (* What kind of scrollbars do we want for palette selection?
  26.        Defaults to instant updating PScrollingBar *)
  27.     ScrollType = PScrollingBar;
  28.  
  29.     VideoPaletteDataRec =
  30.       record
  31.         Red   : Longint;
  32.         Green : Longint;
  33.         Blue  : Longint;
  34.       end;
  35.  
  36.     PVideoPaletteDialog = ^TVideoPaletteDialog;
  37.     TVideoPaletteDialog =
  38.       object (TDialog)
  39.         Color    : Byte;
  40.         Red      : ScrollType;
  41.         Green    : ScrollType;
  42.         Blue     : ScrollType;
  43.         OldPal   : RGBPalette;
  44.         constructor Init(AColor:Integer);
  45.         constructor Load(var S:TStream);
  46.         procedure HandleEvent(var Event:TEvent); virtual;
  47.         procedure Store(var S:TStream);
  48.       end;
  49.  
  50.   var
  51.     VideoPaletteData : VideoPaletteDataRec;
  52.  
  53.   procedure ReloadPalette;
  54.  
  55.  
  56. (***************************************************************************
  57. ***************************************************************************)
  58. implementation
  59.  
  60.  
  61.   (*******************************************************************
  62.     Reload the palette
  63.   *******************************************************************)
  64.   procedure ReloadPalette;
  65.   begin
  66.     VideoPalette.SetRGB(VideoPalette.RGB);
  67.   end;
  68.  
  69.  
  70. (***************************************************************************
  71. ***************************************************************************)
  72.  
  73.   constructor TVideoPaletteDialog.Init;
  74.     procedure Add(y:Integer; Text:String; var P:ScrollType; hc:Word);
  75.       const
  76.         X = 18;
  77.       var
  78.         R : TRect;
  79.         Control : PView;
  80.     begin
  81.       R.Assign(X+6, y, 57, y+1);
  82.       New(P, Init(R));
  83.       P^.SetRange(0,63);
  84.       Insert(P);
  85.  
  86.       R.Assign(X, y, X+4, y+1);
  87.       Control:=New(PInputLine, Init(R, 2));
  88.       Control^.HelpCtx:=hc;
  89.       Insert(Control);
  90.  
  91.       PInputLine(Control)^.Validator:=New(PSliderValidator, Init(0, 63, P));
  92.       PInputLine(Control)^.Validator^.Options:=voTransfer;
  93.  
  94.       R.Assign(X-1, y-1, X+6, y);
  95.       Insert(New(PLabel, Init(R, Text, Control)));
  96.     end;
  97.  
  98.     var
  99.       R : TRect;
  100.       Control : PView;
  101.   begin
  102.     R.Assign(10, 4, 70, 18);
  103.     inherited Init(R, 'Video Palette');
  104.     Options:=Options or ofCenterX or ofCenterY;
  105.     Color:=AColor;
  106.     OldPal:=VideoPalette.RGB;
  107.  
  108.     R.Assign(3, 4, 15, 8);
  109.     Control:=New(PColorSelector, Init(R, csForeground));
  110.     Insert(Control);
  111.     Dec(R.A.Y);
  112.     R.B.Y:=4;
  113.     Insert(New(PLabel, Init(R, '~C~olor', Control)));
  114.  
  115.  
  116.     Add(4, '~R~ed', Red, hctoyVPRed);
  117.     Add(6, '~G~reen', Green, hctoyVPGreen);
  118.     Add(8, '~B~lue', Blue, hctoyVPBlue);
  119.  
  120.  
  121.     R.Assign(13, 11, 23, 13);
  122.     Control:=New(PButton, Init(R, 'O~K~', cmOK, bfDefault));
  123.     Control^.HelpCtx:=hcOK;
  124.     Insert(Control);
  125.  
  126.     R.Assign(25, 11, 35, 13);
  127.     Control:=New(PButton, Init(R, 'Cancel', cmCancel, bfNormal));
  128.     Control^.HelpCtx:=hcCancel;
  129.     Insert(Control);
  130.  
  131.     R.Assign(37, 11, 47, 13);
  132.     Control:=New(PButton, Init(R, 'Help', cmHelp, bfGrabFocus));
  133.     Control^.HelpCtx:=hctoyVPDialogHelp;
  134.     Insert(Control);
  135.  
  136.     Message(@Self, evBroadcast, cmColorForegroundChanged, Pointer(Color));
  137.  
  138.     SelectNext(False);
  139.   end;
  140.  
  141.  
  142.   (*******************************************************************
  143.     Load from stream
  144.   *******************************************************************)
  145.   constructor TVideoPaletteDialog.Load(var S:TStream);
  146.   begin
  147.     inherited Load(S);
  148.     GetSubViewPtr(S, Red);
  149.     GetSubViewPtr(S, Green);
  150.     GetSubViewPtr(S, Blue);
  151.   end;
  152.  
  153.  
  154.   (*******************************************************************
  155.     Respond to scrollbar changes
  156.   *******************************************************************)
  157.   var
  158.     (* Well, hrrm, I couldn't solve this one *)
  159.     Flag : Boolean;
  160.  
  161.   procedure TVideoPaletteDialog.HandleEvent(var Event:TEvent);
  162.     var
  163.       Temp : VideoPaletteDataRec;
  164.  
  165.     procedure Update;
  166.     begin
  167.       if not IgnoreSliderMessage then
  168.       begin
  169.         Temp.Red:=Red^.Value;
  170.         Temp.Green:=Green^.Value;
  171.         Temp.Blue:=Blue^.Value;
  172.  
  173.         SetData(Temp);
  174.       end
  175.       else
  176.         GetData(Temp);
  177.  
  178.       with VideoPalette do
  179.       begin
  180.         RGB[Color].R:=Temp.Red;
  181.         RGB[Color].G:=Temp.Green;
  182.         RGB[Color].B:=Temp.Blue;
  183.         SetRGB(RGB);
  184.       end;
  185.     end;
  186.  
  187.   begin
  188.     if (Event.What=evCommand) and (Event.Command=cmCancel) then
  189.       VideoPalette.SetRGB(OldPal);
  190.  
  191.     inherited HandleEvent(Event);
  192.  
  193.     if (Event.What=evBroadcast) then
  194.       case Event.Command of
  195.         cmScrollbarChanged:     if not Flag then Update;
  196.         cmColorForegroundChanged:
  197.           begin
  198.             Color:=Event.InfoByte;
  199.             with VideoPalette do
  200.             begin
  201.               Flag:=True;
  202.               IgnoreSliderMessage:=True;
  203.               Red^.SetValue(RGB[Color].R);
  204.               Green^.SetValue(RGB[Color].G);
  205.               Blue^.SetValue(RGB[Color].B);
  206.               IgnoreSliderMessage:=False;
  207.               Update;
  208.               Flag:=False;
  209.             end;
  210.           end;
  211.       end;
  212.   end;
  213.  
  214.  
  215.   (*******************************************************************
  216.     Store on stream
  217.   *******************************************************************)
  218.   procedure TVideoPaletteDialog.Store(var S:TStream);
  219.   begin
  220.     inherited Store(S);
  221.     PutSubViewPtr(S, Red);
  222.     PutSubViewPtr(S, Green);
  223.     PutSubViewPtr(S, Blue);
  224.   end;
  225.  
  226.  
  227. end.